#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include <fcntl.h>
// 2. 系统调用的文件操作
int main()
{
	int fd = open("log.txt",O_CREAT|O_WRONLY|O_TRUNC,0666);
	if (fd < 0) exit(1);

	dup2(fd,1);
	// 默认向显示器输出
	printf("fd: %d\n",fd);
	printf("hello file\n");
	printf("hello file\n");
	printf("hello file\n");
	fprintf(stdout,"hello stdout\n");
	fprintf(stdout,"hello stdout\n");
	fprintf(stdout,"hello stdout\n");
	const char* msg = "hello world\n";
	write(fd,msg,strlen(msg));
	close(fd);
	return 0;
}
//int main()
//{
//	close(1);
//	int fd1 = open("log.txt",O_CREAT|O_WRONLY|O_TRUNC,0666);
//	printf("fd1: %d\n",fd1);
//	// 先不写 close
//	close(fd1);
//	return 0;
//}


//int main()
//{
//    int fd1 = open("log1.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    int fd2 = open("log2.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    int fd3 = open("log3.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    int fd4 = open("log4.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    if(fd1 < 0)exit(1);
//    if(fd2 < 0)exit(1);
//    if(fd3 < 0)exit(1);
//    if(fd4 < 0)exit(1);
//    printf("stdin: %d\n", stdin->_fileno);
//    printf("stdout: %d\n",stdout->_fileno);
//    printf("stderr: %d\n", stderr->_fileno);
//    printf("fd1: %d\n", fd1);
//    printf("fd2: %d\n", fd2);
//    printf("fd3: %d\n", fd3);
//    printf("fd4: %d\n", fd4);
//
//    close(fd1);
//    close(fd2);
//    close(fd3);
//    close(fd4);
//	return 0;
//}

//int main()
//{
//	int fd = open("log.txt",O_RDONLY);
//
//	if (fd < 0)
//	{
//		perror("open failed\n");
//		exit(1);
//	}
//	printf("fd:%d\n",fd);
//	while (1)
//	{
//	  char buffer[64];
//	  int n = read(fd,buffer,sizeof(buffer)-1);
//	  if (n>0)
//	  {
//			buffer[n] = 0;
//		  	printf("%s",buffer);
//	  }
//	  else if (n == 0)
//	  {
//			break;
//	  }
//	}
//	close(fd);
//	return 0;
//}

//int main()
//{
//	umask(0);
//	//int fd = open("log.txt",O_CREAT | O_WRONLY,0666);
//	int fd = open("log.txt",O_CREAT | O_WRONLY | O_TRUNC,0666);
////	int fd = open("log.txt",O_CREAT | O_WRONLY | O_APPEND,0666);
//	//const char* msg = "hello world";
//	//const char* msg = "abcd";
//	
//	// "123456" vs 123456
//	int cnt = 1;
//	//int a = 123456;
//	const char* msg = "123456\n";
//	while (cnt)
//	{
//		char buffer[128];
//		//snprintf(buffer,sizeof(buffer),"%s\n",msg);
//		//write(fd,&a,sizeof(a));		
//		write(fd,msg,strlen(msg));		
//		cnt--;
//	}
//	return 0;
//}





//// 1. 回归 C 语言的文件操作
//int main() {
//    // 方法1: printf
//    printf("=== 方法1: printf ===\n");
//    printf("整数: %d, 字符串: %s\n", 100, "example");
//    
//    // 方法2: puts
//    printf("\n=== 方法2: puts ===\n");
//    puts("这是第一行");
//    puts("这是第二行");
//    
//    // 方法3: putchar
//    printf("\n=== 方法3: putchar ===\n");
//    putchar('H'); putchar('e'); putchar('l'); putchar('l'); putchar('o');
//    putchar('\n');
//    
//    // 方法4: fprintf到stdout
//    printf("\n=== 方法4: fprintf ===\n");
//    fprintf(stdout, "标准输出: %s\n", "Hello");
//    fprintf(stderr, "标准错误: %s\n", "Error message");
//    
//    // 方法5: fwrite
//    printf("\n=== 方法5: fwrite ===\n");
//    char data[] = "fwrite输出示例\n";
//    fwrite(data, sizeof(char), strlen(data), stdout);
//    
//    return 0;
//}
//int main(int argc, char *argv[])
//{
//    if(argc != 2)
//    {
//        printf("Usage: %s filename\n", argv[0]);
//        return 1;
//    }
//    FILE *fp = fopen(argv[1], "r");
//    if(NULL == fp)
//    {
//        perror("fopen");
//        return 2;
//    }
//
//    while(1)
//    {
//        char buffer[128];
//        memset(buffer, 0, sizeof(buffer));
//        int n = fread(buffer, sizeof(buffer)-1, 1, fp);
//        if(n > 0)
//        {
//            printf("%s", buffer);
//        printf("Usage: %s filename\n", argv[0]);
//        return 1;
//    }
//    FILE *fp = fopen(argv[1], "r");
//    if(NULL == fp)
//    {
//        perror("fopen");
//        return 2;
//    }
//
//    while(1)
//    {
//        char buffer[128];
//        memset(buffer, 0, sizeof(buffer));
//        int n = fread(buffer, sizeof(buffer)-1, 1, fp);
//        if(n > 0)
//        {
//            printf("%s", buffer);
//        }
//        if(feof(fp))
//            break;
//    }
//
//    fclose(fp);
//    return 0;
//}

//// 1.1. 向 文件 写入指定内容
//int main()
//{
//	FILE* fp = fopen("log.txt","w");
